로딩 중이에요... 🐣
[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
03 쿠키커터 djoser ninja | ✅ 편저: 코담 운영자
Cookiecutter + Djoser + Django Ninja를 활용한 Django 백엔드 프로젝트 시작 방법
이 문서는 Cookiecutter 템플릿을 활용하여 Django 프로젝트를 초기화하고, 해당 프로젝트에 Djoser 및 Django Ninja를 결합하여 API 인증 및 라우팅 기능을 구축하는 방법을 설명합니다.
1. Cookiecutter Django 프로젝트 시작하기
1.1 Cookiecutter 설치
pip install cookiecutter
1.2 공식 Django Cookiecutter 템플릿 사용하여 생성
cookiecutter https://github.com/cookiecutter/cookiecutter-django
1.3 템플릿 설정 시 선택 예시
project_name: myproject
...
use_docker: y
cloud_provider: None
mail_service: mailgun
use_async: n
1.4 프로젝트 디렉터리로 이동 후 의존성 설치 및 초기화
cd myproject
make install
make migrate
make createsuperuser
2. Djoser 설치 및 설정 (JWT 인증 제공)
2.1 Djoser 및 JWT 관련 패키지 설치
pip install djoser djangorestframework-simplejwt
2.2 settings.py
설정 추가
INSTALLED_APPS += [
'rest_framework',
'rest_framework.authtoken',
'djoser',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=30),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
}
2.3 urls.py
설정
from django.urls import path, include
urlpatterns = [
...
path('auth/', include('djoser.urls')),
path('auth/', include('djoser.urls.jwt')),
]
3. Django Ninja 설치 및 API 설정
3.1 설치
pip install django-ninja
3.2 api/api.py
생성
from ninja import NinjaAPI
from django.contrib.auth.models import User
from pydantic import BaseModel
api = NinjaAPI()
class UserOut(BaseModel):
id: int
username: str
@api.get("/users", response=list[UserOut])
def list_users(request):
return list(User.objects.all())
3.3 urls.py
에 연결
from django.urls import path
from .api import api
urlpatterns = [
path("api/", api.urls),
]
4. 전체 디렉터리 구조 예시 (중요 파일 기준)
myproject/
├── config/
│ └── settings.py
├── api/
│ └── api.py
├── requirements.txt
└── manage.py
✅ 정리
- Cookiecutter로 빠르게 Django 프로젝트 구성 가능
- Djoser로 JWT 기반 사용자 인증 시스템 구축
- Django Ninja로 타입 안전하고 강력한 API 라우팅 지원
다음 단계: Next.js 15 설치 및 Django 백엔드와의 연동 방법 설명은 다음 캔버스에서 이어집니다.